iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
Security

我逆向你逆向我的逆向工程膩系列 第 8

Dx08 - 寫一個 PE 解析器

  • 分享至 

  • xImage
  •  

在學到 PE 中的內容後,來寫一個的 PE解析器 吧。

開源程式碼 : https://github.com/aaaddress1/Windows-APT-Warfare
聲明 : 本文使用書中程式碼作為研究對象, 並接受 GNU 3.0 授權條款。

程式連接

https://github.com/Dinlon5566/VirusStrategy/blob/main/Windows/Windows-APT-Warfare/ch2/my_PE_Praser.cpp

這個程式是逆向工程大師馬聖豪的作品,我在學習的時候使用了這份程式來學習 PE 結構,我認為效果十分顯著。所以打算分析這個程式並做功能上的講解。

  1. 讀入檔案

使用參數的方式得到目標檔案的位置,然後讀入檔案。

https://ithelp.ithome.com.tw/upload/images/20220922/20135675Ra3Bz2lxHD.png

  1. 取得檔案的大小、內容。

可以用 fseek 來操縱指標位置來取得文件大小。

https://ithelp.ithome.com.tw/upload/images/20220922/20135675D3J1nbh0vu.png

  1. 進入重點

建立兩個指標指向 Header,這些物件定義包含在 <winnt.h> ( 使用 <windows.h> 就含在裡面了 )。

DOS Header 的位置就是檔案的位置

NT Header 的位置偏移量包含在 DOS Header0x3C 位置,位在結構中 .e_lfanew

所以實際位置是 DOS Header 的位置加上偏移量

https://ithelp.ithome.com.tw/upload/images/20220922/20135675ddkXuIzbAR.png

  1. 檢查是否正確

可以利用魔術碼來確定 Header 是否正確。

各自的常數應為 IMAGE_DOS_SIGNATUREIMAGE_NT_SIGNATURE

https://ithelp.ithome.com.tw/upload/images/20220922/20135675ih1a7m72Y3.png

  1. Option Header

當有了 NT Header 後,就可以透過她來取得裡面的 FileOption Header

由於 File HeaderOption Header 操作差不多,這邊演示 Option Header

然後就可以存取 Header 裡面的資料並輸出。

https://ithelp.ithome.com.tw/upload/images/20220922/20135675yq4xVmWo5B.png

  1. 輸出 Section Header 所有區塊

因為 Section Header 會緊連在 NT Header 之後,所以它的位置就是 NT Header + sizeof( NT Header )

然後就要來遍歷 Section 中的區塊資料。區塊數量是 NT Header 中的 NumberOfSections,就可以由 0 遍歷到最後區塊。

https://ithelp.ithome.com.tw/upload/images/20220922/20135675eR3ZG55tBX.png

大功告成,那會了這些可以做甚麼呢?

這些知識是逆向工程的基礎,可以透過 PE 解析來得知這份檔案想做甚麼,判定是不是想壞壞。


上一篇
Dx07 - PE格式映射解析
下一篇
Dx09 - RAW & DLL
系列文
我逆向你逆向我的逆向工程膩31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言